iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0

簡介

在之前的 Django 章節中,我們提到過資料庫(Database)。Web 應用程式中的資料通常儲存在硬碟上的資料庫中,而 Django 則透過內建的模組來處理 Web 應用程式與資料庫之間的溝通。相較之下,像 Flask 這類輕量級框架並不提供內建的資料庫整合模組,因此開發者需要自行選擇合適的套件或自行開發。ORM(物件關聯對映)則是開發者常選擇的工具之一。

ORM 的全名是 Object-Relational Mapping,其中的 Object 代表 Python 中的物件,而 Relational 則指關聯式資料庫(Relational Database)。關聯式資料庫是目前主流的資料庫之一,適用於許多資料存取的情境。從名稱 "Object-Relational Mapping" 可以看出,ORM 是程式語言與資料庫之間的橋樑,開發者透過 Python 物件即可輕鬆地進行資料庫存取任務。

在之前提到的 Django 中,Model 其實也是一種 ORM。而在 Python 的套件中,另一個知名的 ORM 是 SQLAlchemy。接下來,我將通過範例介紹如何定義、創建以及查詢資料。

範例

本次範例使用的是 SQLAlchemy 2.0.34 版本

poetry add SQLAlchemy==2.0.34

本文將繼續以之前 Django 章節中的購物平台範例作為例子。首先,開發者需要先定義一個 Base Class,作為 ORM 的基礎類別。接著,定義一個 Product 類別(商品),並繼承自 Base Class。其中,name 欄位用來儲存商品名稱,並限制名稱的最大長度為 200 個字元。

from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy import String

class Base(DeclarativeBase):
    pass

class Product(Base):
    name: Mapped[str] = mapped_column(String(200))

當開發者想從硬碟中的資料庫取得資料時,首先需要建立 Python 與資料庫之間的連線(Session)。接著,使用 select 函數來查詢所需的物件。例如,在本次範例中,開發者希望取得商品(Product)。此外,開發者可以使用 where 函數來設定篩選條件,如查詢名稱為 "demo 1" 的商品。最終,開發者便可取得所需的 product 物件。

from sqlalchemy import create_engine
from sqlalchemy import select
from sqlalchemy.orm import Session

engine = create_engine("sqlite://", echo=True)
session = Session(engine)
stmt = select(User).where(Product.name = "demo 1")
product = session.scalars(stmt).one()

上一篇
[Day 06] Jinja2
下一篇
[Day 08] Pydantic
系列文
Python 不止於數據,開發應用程式它也在行!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言